package com.linedata.acq.metier.norme.fmb;

import oracle.forms.jdapi.Block;
import oracle.forms.jdapi.Canvas;
import oracle.forms.jdapi.FormModule;
import oracle.forms.jdapi.Graphics;
import oracle.forms.jdapi.Item;
import oracle.forms.jdapi.JdapiIterator;

public class ROBJ_FMB {

	private FormModule	fmb;

	public ROBJ_FMB(FormModule fmb) {
		this.fmb = fmb;
	}

	private String	error	= "";

	public String getError() {
		return error;
	}

	public void setError(String error) {
		this.error += error;
	}

	/**
	 * EKFR023_1 :: Les champs dates, montants basés et champs num. sont
	 * référencés par IESO$NUMBER ou IESO$NUMBER_MR *
	 * 
	 * @param fmb
	 */
	public void subClassDateMtNum() {
		// TODO Faudra une connexion a la base pour recuperer le type de l'objet

	}

	/**
	 * EKFR023_2 :: Le champs dates affichés XXX_AFF sont référencés par
	 * IESO$DATE_AFF (ou IESO$DATE_AFF_MR)
	 * 
	 * @param fmb
	 */
	public void subClassDateAff() {
		// FIXME Faut changer la condition: ca ne commence pas toujours avec
		// W_DATE

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			for (JdapiIterator items = block.getItems(); items.hasNext();) {

				Item item = (Item) items.next();
				boolean trouve = false;
				if (item.getName().toUpperCase().startsWith("W_DATE") && item.getName().toUpperCase().endsWith("_AFF")) {

					if (item.isSubclassed()
							&& (!item.getSubclassParent().getName().toUpperCase().equals("IESO$DATE_AFF") || !item
									.getSubclassParent().getName().toUpperCase().equals("IESO$DATE_AFF_MR"))) {

						trouve = true;
					}
					if (!trouve) {

						this.setError("\tEKFR023_2 : " + block.getName() + "\t:: " + item.getName() + "\t::  "
								+ item.getSubclassParent().getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR023_3 :: Le champs montants affichés XXX_AFF sont référencés par
	 * ? IESO$MONTANT (ou IESO$MONTANT_AFF_MR)
	 * 
	 * @param fmb
	 */
	public void subClassMTAff() {
		// FIXME Faut changer la condition: ca ne commence pas toujours avec MT_
		// faut tester la procedure et tester avec la colonne de la base

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			for (JdapiIterator items = block.getItems(); items.hasNext();) {

				Item item = (Item) items.next();
				boolean trouve = false;
				if (item.getName().toUpperCase().startsWith("MT_") && item.getName().toUpperCase().endsWith("_AFF")) {

					if (item.isSubclassed()
							&& (item.getSubclassParent().getName().toUpperCase().equals("IESO$MONTANT") || item
									.getSubclassParent().getName().toUpperCase().equals("IESO$MONTANT_AFF_MR"))) {

						trouve = true;
					}
					if (!trouve) {

						this.setError("\tEKFR023_3 : " + block.getName() + "\t:: " + item.getName() + "\t::  "
								+ item.getSubclassParent().getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR023_4 :: Les champs caractères sont référencés IESO$CHAR(ou
	 * IESO$CHAR_MR )
	 * 
	 * @param fmb
	 */
	public void subClassChar() {
		// FIXME marche pas: s'il est de type char il n'est pas obligatoirement
		// $char

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			for (JdapiIterator items = block.getItems(); items.hasNext();) {

				Item item = (Item) items.next();
				boolean trouve = false;
				if (item.getDataType() == 0) {

					if (item.isSubclassed()
							&& (item.getSubclassParent().getName().toUpperCase().equals("IESO$CHAR") || item
									.getSubclassParent().getName().toUpperCase().equals("IESO$CHAR_MR"))) {

						trouve = true;
					}
					if (!trouve) {

						this.setError("\tEKFR023_4 : " + block.getName() + "\t:: " + item.getName() + "\t::  "
								+ item.getSubclassParent().getName() + "\t::  " + item.getDataType() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR023_5 :: Les boutons LOV sont référencés IESO$LOV_BUT(ou
	 * IESO$LOV_BUT_MR )
	 * 
	 * @param fmb
	 */
	public void subClassLov() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			for (JdapiIterator items = block.getItems(); items.hasNext();) {

				Item item = (Item) items.next();
				boolean trouve = false;
				if (item.getName().toUpperCase().startsWith("LOV_")) {

					if (item.isSubclassed()
							&& (item.getSubclassParent().getName().toUpperCase().equals("IESO$LOV_BUT") || item
									.getSubclassParent().getName().toUpperCase().equals("IESO$LOV_BUT_MR"))) {

						trouve = true;
					}
					if (trouve) {

						this.setError("\tEKFR023_5 : " + block.getName() + "\t:: " + item.getName() + "\t::  "
								+ item.getSubclassParent().getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR023_6 :: Les boutons EDIT sont référencés IESO$BUTTON_EDIT (ou
	 * IESO$BUTTON_EDIT_MR)
	 * 
	 * @param fmb
	 */
	public void subClassEdit() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			for (JdapiIterator items = block.getItems(); items.hasNext();) {

				Item item = (Item) items.next();
				boolean trouve = false;
				if (item.getDataType() == 7 && item.getName().toUpperCase().startsWith("LOV_")) {

					if (item.isSubclassed()
							&& (item.getSubclassParent().getName().toUpperCase().equals("IESO$BUTTON_EDIT") || item
									.getSubclassParent().getName().toUpperCase().equals("IESO$BUTTON_EDIT_MR"))) {

						trouve = true;
					}
					if (!trouve) {

						this.setError("\tEKFR023_6 : " + block.getName() + "\t:: " + item.getName() + "\t::  "
								+ item.getSubclassParent().getName() + "\t::  " + item.getDataType() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR023_7 :: Les frames sont référencées par IESO$FRAME
	 * 
	 * @param fmb
	 */
	public void subClassFrame() {

		for (JdapiIterator canvases = fmb.getCanvases(); canvases.hasNext();) {

			Canvas canvas = (Canvas) canvases.next();
			if (!canvas.getName().toUpperCase().equals("TOOLBAR") && !canvas.getName().toUpperCase().equals("FOOTER")) {

				for (JdapiIterator graphicses = canvas.getGraphicses(); graphicses.hasNext();) {

					Graphics graphics = (Graphics) graphicses.next();
					if (graphics.getGraphicsType() == 8) {

						if (!graphics.isSubclassed()) {

							this.setError("\tEKFR023_7 : " + canvas.getName() + "\t:: " + graphics.getName() + "\t::  "
									+ graphics.getGraphicsType() + "\n");
						}
						if (graphics.isSubclassed()
								&& !graphics.getSubclassParent().getName().toUpperCase().equals("IESO$FRAME")) {

							this.setError("\tEKFR023_7 : " + canvas.getName() + "\t:: " + graphics.getName() + "\t::  "
									+ graphics.getSubclassParent().getName() + "\t::  " + graphics.getGraphicsType()
									+ "\n");
						}
					}
				}
			}
		}
	}

	/**
	 * EKFR023_8 :: Les titres des blocks sont référencées par IESO$TITRE
	 * 
	 * @param fmb
	 */
	public void subClassTitreBlock() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			if (block.getName().toUpperCase().equals("TITRE_CTRL")) {

				for (JdapiIterator items = block.getItems(); items.hasNext();) {

					Item item = (Item) items.next();
					if (item.getName().toUpperCase().endsWith("_TITRE") && item.isSubclassed()
							&& !item.getSubclassParent().getName().toUpperCase().equals("IESO$TITRE")) {

						this.setError("\tEKFR023_8 : " + block.getName() + "\t:: " + item.getName() + "\t::  "
								+ item.getSubclassParent().getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR023_9 :: Les blocks sont référencés par IESO$BLOCK (ou
	 * IESO$BLOCK_MR)
	 * 
	 * @param fmb
	 */
	public void subClassBlock() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			boolean trouve = false;
			if (block.getName().toUpperCase().equals("TOOLBAR") || block.getName().toUpperCase().equals("FOOTER")
					|| block.getName().toUpperCase().equals("DICREF")
					|| block.getName().toUpperCase().equals("PAGE_CTRL")
					|| block.getName().toUpperCase().equals("TITRE_CTRL")) {

				// Nothing to do
				continue;
			} else {

				if (block.isSubclassed())

					if (block.getSubclassParent().getName().toUpperCase().equals("IESO$BLOCK")
							|| block.getSubclassParent().getName().toUpperCase().equals("IESO$BLOCK_MR")) {

						trouve = true;
					}
				if (!trouve) {

					this.setError("\tEKFR023_9 : " + block.getName() + "\t:: " + block.getSubclassParent().getName()
							+ "\n");
				}
			}
		}
	}

	@Override
	public String toString() {
		return this.getError();
	}
}
